package com.liusr.template.config;

import com.liusr.template.constant.MQExchangeName;
import com.liusr.template.constant.MQQueueNames;
import com.liusr.template.constant.MQRoutingKeyName;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author Liusr
 * @date 2023/3/14
 * @package com.liusr.template.config
 * @Description: MQ 配置
 */
@Configuration
public class MqConfig {

	@Bean
	public DirectExchange directExchange() {
		return new DirectExchange(MQExchangeName.DEFAULT.name(),true,false);
	}

	@Bean
	public DirectExchange notifyMsgDirectExchange() {
		return new DirectExchange(MQExchangeName.NOTIFY_MSG.name());
	}

	@Bean
	public Queue notifyMsgQueue() {
		/**
		 * 1、name:    队列名称
		 * 2、durable: 是否持久化
		 * 3、exclusive: 是否独享、排外的。如果设置为true，定义为排他队列。则只有创建者可以使用此队列。也就是private私有的。
		 * 4、autoDelete: 是否自动删除。也就是临时队列。当最后一个消费者断开连接后，会自动删除。
		 * */
		return new Queue(MQQueueNames.NOTIFY_MSG_QUEUE,true,false,false);
	}

	@Bean
	public Binding notifyMsgQueueBinding() {
		//链式写法，绑定交换机和队列，并设置匹配键
		return BindingBuilder
				//绑定队列
				.bind(notifyMsgQueue())
				//到交换机
				.to(notifyMsgDirectExchange())
				//并设置匹配键
				.with(MQRoutingKeyName.NOTIFY_MSG);
	}
}
